package com.deruan.hotcore.resource.table.plugin;

import java.awt.Component;
import java.awt.Font;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import javax.swing.JTable;
import javax.swing.UIManager;

import org.columba.mail.gui.table.model.MessageNode;
import org.columba.mail.gui.table.plugins.DefaultLabelRenderer;

import com.deruan.hotcore.resource.gui.tree.ResourceTreeNode;

public class ResourceDateRenderer extends ResourceDefaultLabelRendrer
{
	static SimpleDateFormat dfWeek = new SimpleDateFormat("EEE HH:mm", Locale
			.getDefault());

	// use local date settings
	DateFormat dfCommon = DateFormat.getDateInstance();

	static final long OneDay = 24 * 60 * 60 * 1000;

	static TimeZone localTimeZone = TimeZone.getDefault();

	private Font boldFont;

	public ResourceDateRenderer() 
	{
		super();
		// setOpaque(true); //MUST do this for background to show up.
		boldFont = UIManager.getFont("Tree.font");
		boldFont = boldFont.deriveFont(Font.BOLD);
	}

	public void updateUI() 
	{
		super.updateUI();
		boldFont = UIManager.getFont("Tree.font");
		boldFont = boldFont.deriveFont(Font.BOLD);
	}

	public static int getLocalDaysDiff(long t) 
	{
		return (int) (((System.currentTimeMillis() + localTimeZone
				.getRawOffset()) - (((t + localTimeZone.getRawOffset()) / OneDay) * OneDay)) / OneDay);
	}

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {

		super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
				row, column);

		if (value == null) {
			setText("");

			return this;
		}

		Date date =((ResourceTreeNode) value).getResourceBean().getPublicDate();

		if (date == null) {
			return this;
		}

		int diff = getLocalDaysDiff(date.getTime());

		// if ( today
		if ((diff >= 0) && (diff < 7)) {
			setText(dfWeek.format(date));
		} else {
			setText(dfCommon.format(date));
		}

		return this;
	}
}
